# 该文件是应用级别的文件：部门管理业务 实现，封装了以下函数：
# create()：创建部门
# delete()：删除部门
# update()：更新部门信息
# search()：检索部门信息
# is_in_depart_list()：判断某个部门id是否存在



from api_object.apis.wework import WeWork
from api_object.utils.file_tools import FileTool


class Department(WeWork):

    # 获取token的两个参数
    # 企业ID
    #corpid = "ww32744b63ef56457b"
    # 应用的秘钥凭证（不同的应用的秘钥凭证是不同的）
    #corpsecret = "bhs2c1-OSm0ncoslYAUtxbwLQU4mP-S0PetsmzIws0g"


    def __init__(self):
        # 获取文件名为 "corp_info"的yaml文件的数据
        yaml_data = FileTool.read_yaml("corp_info")
        # 从yaml文件数据中提取 corpid 和 corpsecret
        corpid = yaml_data.get("corp_id").get("zhaizhai")
        corpsecret = yaml_data.get("corpsecret").get("department")
        # 调用get_access_token（）方法生成access_token，
        self.get_access_token(corpid, corpsecret)

    def create(self,data):
        '''
        创建部门
        :return:
        '''
        # 新建部门的url
        create_url = "/department/create"
        #获取 access_token
        parms = {"access_token": self.access_token}
        # 调用base封装的send 发起请求
        r = self.send("POST",create_url,json=data,params=parms)

        # 将返回的响应返回去
        return r

    def delete(self,depart_id):
        '''
        删除部门
        :return:
        '''
        # 删除部门的url
        delete_url = "/department/delete"
        # 获取 access_token
        parms = {"access_token": self.access_token}
        # 删除部门param的信息拼接
        parms.update({"id": depart_id})
        # 调用base封装的send 发起请求
        r = self.send("GET", delete_url, params=parms)

        # 将返回的响应返回去
        return r

    def update(self,data):
        '''
        修改部门
        :return:
        '''
        # 更新部门的url
        update_url = "/department/update"
        # 获取 access_token
        parms = {"access_token": self.access_token, "id": update_url}
        # 调用base封装的send 发起请求
        r = self.send("POST", update_url, json=data, params=parms)

        # 将返回的响应返回去
        return r

    def search(self):
        '''
        查询部门
        :return:
        '''
        # 查询部门的url
        search_url = "/department/list"
        # 获取 access_token
        parms = {"access_token": self.access_token}
        # 调用base_api.py 封装的send发起请求
        r = self.send("GET", search_url,params=parms)
        #将返回的响应返回出去
        return r

    def is_in_depart_list(self,depart_id):
        '''
        是否在部门列表中
        :return:
        '''
        #查询所有部门，返回完整报文
        r = self.search()
        #获取 返回的完整报文 的 json 部分 （json格式，key值都是用的双引号）
        json_obj = r.json()
        expr = "$..id"
        # 通过调用my_jsonpath获取返回的 所有的部门id(参数为目标体，匹配规则)
        ids_all_department = self.my_jsonpath(json_obj,expr)
        # 断言 是否存在 depart_id
        if ids_all_department:#如果搜索到了所有部门的id，就返回一个id列表
            if depart_id in ids_all_department:#判断：depart_id是在所有部门id列表里,返回True
                print("部门创建成功")
                return True
            else:#判断：depart_id不在所有部门id列表里,返回False
                print("部门创建失败")
                return False
        else:#如果没有搜索到所有部门的id，那么返回false
            print("搜索所有部门ID失败")
            return False